ν¬κ΄μ μΈ κ²μ¬ μμ€ν κ³Ό νκ³ ν νμ μμ μ±μΌλ‘ TypeScript νλ‘μ νΈμ νμ§ κ΄λ¦¬λ₯Ό κ°ννμΈμ. μ λ’°μ± λκ³ μ μ§λ³΄μ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν λͺ¨λ² μ¬λ‘μ κ³ κΈ κΈ°μ μ μ΅νμΈμ.
TypeScript νμ§ κ΄λ¦¬: κ²μ¬ μμ€ν λ° νμ μμ μ± μλ²½ λ§μ€ν°νκΈ°
μ€λλ λΉ λ₯΄κ² λ³ννλ μννΈμ¨μ΄ κ°λ° νκ²½μμ μ½λ νμ§ μ μ§λ³΄μλ 무μλ³΄λ€ μ€μν©λλ€. TypeScriptλ μ μ νμ΄νκ³Ό μ΅μ μΈμ΄ κΈ°λ₯μ ν΅ν΄ κ²¬κ³ νκ³ μ μ§λ³΄μ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μλΉν μ΄μ μ μ 곡ν©λλ€. κ·Έλ¬λ TypeScriptμ μ μ¬λ ₯μ μ΅λν νμ©νλ €λ©΄ κ²μ¬ μμ€ν κ³Ό νκ³ ν νμ μμ μ±μ ν¬κ΄νλ μ μ μλ νμ§ κ΄λ¦¬ μ λ΅μ΄ νμν©λλ€. μ΄ ν¬κ΄μ μΈ κ°μ΄λλ TypeScript νμ§ κ΄λ¦¬μ νμμ μΈ μΈ‘λ©΄μ νꡬνλ©°, κ°λ° νλ‘μΈμ€λ₯Ό ν₯μμν€κΈ° μν μ€μ©μ μΈ ν΅μ°°λ ₯κ³Ό μ€ν κ°λ₯ν κΈ°μ μ μ 곡ν©λλ€.
νμ§ κ΄λ¦¬μ μ€μμ± μ΄ν΄νκΈ°
νμ§ κ΄λ¦¬λ λ¨μν λ²κ·Έλ₯Ό μ°Ύλ κ²μ λμ΄, μ μ΄μ λ²κ·Έλ₯Ό μλ°©νκΈ° μν μ¬μ μλ°©μ μ κ·Ό λ°©μμ λλ€. TypeScriptμ λ§₯λ½μμ νμ§ κ΄λ¦¬λ λ€μ μ¬νμ μ€μ μ λ‘λλ€:
- μ‘°κΈ° λ²κ·Έ κ°μ§: νλ‘λμ νκ²½μ΄ μλ κ°λ° μ€μ μ€λ₯λ₯Ό μλ³ν©λλ€.
- μ½λ μ μ§λ³΄μμ±: μ½λλ² μ΄μ€κ° μκ°μ΄ μ§λ¨μ λ°λΌ μ΄ν΄νκΈ° μ½κ³ μ μ κ°λ₯νλλ‘ λ³΄μ₯ν©λλ€.
- νμ ν¨μ¨μ±: μΌκ΄λ μ½λ μ€νμΌκ³Ό λͺ νν μ€λ₯ λ©μμ§λ₯Ό ν΅ν΄ κ°λ°μ κ°μ μνν νμ μ μ΄μ§ν©λλ€.
- κΈ°μ λΆμ± κ°μ: μ μ¬μ μΈ λ¬Έμ λ₯Ό μ‘°κΈ°μ ν΄κ²°νμ¬ κΈ°μ λΆμ±μ μΆμ μ μ΅μνν©λλ€.
- μ±λ₯ ν₯μ: μ μ λΆμ λ° νλ‘νμΌλ§μ ν΅ν΄ μ±λ₯κ³Ό ν¨μ¨μ±μ μν΄ μ½λλ₯Ό μ΅μ νν©λλ€.
κ²¬κ³ ν νμ§ κ΄λ¦¬ μμ€ν μ μ΅μ’ μ νμ κ°μ ν λΏλ§ μλλΌ μ λ°μ μΈ κ°λ° κ²½νμ ν₯μμμΌ κ°λ°μμ μμ°μ±μ λμ΄κ³ μ€νΈλ μ€λ₯Ό μ€μ¬μ€λλ€.
TypeScript κ²μ¬ μμ€ν ꡬμΆνκΈ°
κ²μ¬ μμ€ν μ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλμΌλ‘ λΆμνκ³ νκ°νλλ‘ μ€κ³λ λꡬ λ° νλ‘μΈμ€ λͺ¨μμ λλ€. TypeScriptμμ ν¨κ³Όμ μΈ κ²μ¬ μμ€ν μ ν΅μ¬ κ΅¬μ± μμλ λ€μκ³Ό κ°μ΅λλ€:
1. λ¦°ν°: μ½λ μ€νμΌ λ° λͺ¨λ² μ¬λ‘ μ μ©
λ¦°ν°λ μΌκ΄λ μ½λ μ€νμΌμ μ μ©νκ³ μΌλ°μ μΈ μ½λ© μ€λ₯λ₯Ό μλ³νλ λ° νμμ μΈ λꡬμ λλ€. λ¦°ν°λ 미리 μ μλ κ·μΉ μΈνΈμ λ°λΌ μ½λλ₯Ό μλμΌλ‘ νμΈνμ¬ λͺ¨λ κ°λ°μκ° λμΌν νμ€μ μ€μνλλ‘ ν©λλ€. μΈκΈ° μλ TypeScript λ¦°ν°λ λ€μκ³Ό κ°μ΅λλ€:
- ESLint: κ΄λ²μν JavaScript λ° TypeScript κ·μΉμ μ§μνλ κ³ λλ‘ κ΅¬μ± κ°λ₯ν λ¦°ν°μ λλ€. React λ° Angularμ κ°μ λ§μ JavaScript νλ μμν¬μμ λ리 μ¬μ©λ©λλ€.
- TSLint (μ¬μ© μ€λ¨λ¨, ESLintλ‘ λ§μ΄κ·Έλ μ΄μ ): TSLintλ TypeScriptμ μλ λ¦°ν°μμ§λ§ νμ¬λ μ¬μ© μ€λ¨λμμ΅λλ€. ESLintλ‘ λ§μ΄κ·Έλ μ΄μ νλ κ²μ΄ μ’μ΅λλ€.
- Prettier: μ½λ νμμ μλμΌλ‘ μ§μ νμ¬ μΌκ΄λ μ€νμΌμ μ€μνκ² νλ μ½λ ν¬λ§·ν°λ‘, 곡백, λ€μ¬μ°κΈ°, μ€ λ°κΏκ³Ό κ΄λ ¨λ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. Prettierλ μ½λ νμ μ§μ μ μ€μ μ λλ©° ESLintμ μ ν΅ν©λ©λλ€.
μμ: TypeScriptμ© ESLint ꡬμ±νκΈ°
TypeScript νλ‘μ νΈμ ESLintλ₯Ό ꡬμ±νλ €λ©΄ νμν ν¨ν€μ§λ₯Ό μ€μΉνκ³ ESLint κ΅¬μ± νμΌ(.eslintrc.js λλ .eslintrc.json)μ μμ±ν΄μΌ ν©λλ€.
λ¨Όμ , νμ ESLint ν¨ν€μ§λ₯Ό μ€μΉν©λλ€:
npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
κ·Έλ° λ€μ, λ€μ ꡬμ±μΌλ‘ .eslintrc.js νμΌμ μμ±ν©λλ€:
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2020,
sourceType: 'module',
},
plugins: ['@typescript-eslint'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
],
rules: {
// Add your custom rules here
'@typescript-eslint/explicit-function-return-type': 'warn',
'@typescript-eslint/no-explicit-any': 'off',
},
};
μ΄ κ΅¬μ±μ TypeScript ESLint νμ λ° νλ¬κ·ΈμΈμ νμ±ννκ³ , κΆμ₯ ESLint κ·μΉμ νμ₯νλ©°, λͺ κ°μ§ μ¬μ©μ μ§μ κ·μΉμ μΆκ°ν©λλ€. explicit-function-return-type κ·μΉμ ν¨μμ λͺ
μμ μΈ λ°ν νμ
μ΄ μμΌλ©΄ κ²½κ³ νκ³ , no-explicit-any κ·μΉμ λΉνμ±νλ©λλ€ (λΉλ‘ anyλ₯Ό μ¬μ©νμ§ μλ κ²μ΄ μΌλ°μ μΌλ‘ μ’μ μ΅κ΄μ΄μ§λ§).
2. μ μ λΆμ λꡬ: μ μ¬μ μΈ μ€λ₯ λ° μ½λ μ€λ© μλ³
μ μ λΆμ λꡬλ κΈ°λ³Έ λ¦°ν μ λμ΄ μ μ¬μ μΈ μ€λ₯, 보μ μ·¨μ½μ λ° μ½λ μ€λ©μ λΆμν©λλ€. μ΄λ¬ν λꡬλ μ½λλ² μ΄μ€μ λν λ κΉμ ν΅μ°°λ ₯μ μ 곡νκ³ κ°μ μ΄ νμν μμμ μλ³νλ λ° λμμ μ€λλ€.
TypeScript μ μ λΆμ λꡬμ μμλ λ€μκ³Ό κ°μ΅λλ€:
- SonarQube: μ½λ νμ§μ μ§μμ μΈ κ²μ¬λ₯Ό μν ν¬κ΄μ μΈ νλ«νΌμΌλ‘, μ½λ μ€λ©, λ²κ·Έ λ° λ³΄μ μ·¨μ½μ μ λν μμΈ λ³΄κ³ μλ₯Ό μ 곡ν©λλ€. SonarQubeλ μ£Όλ‘ λκ·λͺ¨ μ‘°μ§μμ μ¬μ©λ©λλ€.
- TSLint (μ΄μ μλ μΈκΈνμ§λ§ β μ§κΈμ μ¬μ© μ€λ¨λμμΌλ©° ESLintλ‘ λ§μ΄κ·Έλ μ΄μ ν΄μΌ ν¨μ κΈ°μ΅νμμμ€): μ£Όλ‘ λ¦°ν°μ΄μ§λ§, TSLintλ μΌλΆ μ μ λΆμ κ²μ¬λ₯Ό μνν©λλ€.
- μ¬μ©μ μ§μ μ μ λΆμ: TypeScript μ»΄νμΌλ¬ APIλ₯Ό μ¬μ©νμ¬ νΉμ νλ‘μ νΈ μꡬ μ¬νμ ν΄κ²°νκΈ° μν μ¬μ©μ μ§μ μ μ λΆμ κ·μΉμ λ§λ€ μλ μμ΅λλ€.
μμ: TypeScript λΆμμ μν SonarQube μ¬μ©
SonarQubeλ μλ² μ€μ λ° κ΅¬μ± νλ‘μΈμ€λ₯Ό νμλ‘ ν©λλ€. μ€μ μ΄ μλ£λλ©΄ CI/CD νμ΄νλΌμΈκ³Ό ν΅ν©νμ¬ λͺ¨λ 컀λ°μμ TypeScript μ½λλ₯Ό μλμΌλ‘ λΆμν μ μμ΅λλ€. SonarQube μΉ μΈν°νμ΄μ€λ μ€ν κ°λ₯ν ν΅μ°°λ ₯μ΄ λ΄κΈ΄ μμΈ λ³΄κ³ μλ₯Ό μ 곡ν©λλ€.
3. μ½λ κ²ν : μ¬λμ κ°λ λ° μ§μ 곡μ
μλνλ λꡬλ νμμ μ΄μ§λ§, μ¬λμ μ½λ κ²ν λ νμ§ κ΄λ¦¬μ μ€μν κ΅¬μ± μμλ‘ λ¨μ μμ΅λλ€. μ½λ κ²ν λ μλ ¨λ κ°λ°μλ€μ΄ μ½λλ₯Ό κ²ν νκ³ , μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νλ©°, λ€λ₯Έ νμλ€κ³Ό μ§μμ 곡μ ν κΈ°νλ₯Ό μ 곡ν©λλ€.
ν¨κ³Όμ μΈ μ½λ κ²ν μ μ£Όμ μΈ‘λ©΄μ λ€μκ³Ό κ°μ΅λλ€:
- λͺ νν μ§μΉ¨: μ½λ νμ§, 보μ λ° μ±λ₯ νκ° κΈ°μ€μ μ€λͺ νλ λͺ νν μ½λ κ²ν μ§μΉ¨μ μ립ν©λλ€.
- 건μ€μ μΈ νΌλλ°±: μμ±μλ₯Ό λΉνν기보λ€λ μ½λ κ°μ μ μ€μ μ λ 건μ€μ μΈ νΌλλ°±μ μ 곡ν©λλ€.
- μλνλ κ²μ¬: λ¦°ν° λ° μ μ λΆμ λꡬλ₯Ό μ½λ κ²ν νλ‘μΈμ€μ ν΅ν©νμ¬ μΌλΆ κ²μ¬λ₯Ό μλνν©λλ€.
- μ§μ 곡μ : μ½λ κ²ν λ₯Ό νμλ€ κ°μ μ§μκ³Ό λͺ¨λ² μ¬λ‘λ₯Ό 곡μ νλ κΈ°νλ‘ νμ©ν©λλ€.
μμ: μ½λ κ²ν μν¬νλ‘ κ΅¬ν
Gitκ³Ό κ°μ λ§μ λ²μ μ μ΄ μμ€ν μ μ½λ κ²ν λ₯Ό μν λ΄μ₯ κΈ°λ₯μ μ 곡ν©λλ€. μΌλ°μ μΈ μν¬νλ‘λ ν 리νμ€νΈλ₯Ό μμ±νκ³ , κ²ν μλ₯Ό ν λΉνκ³ , νΌλλ°±μ μ²λ¦¬νκ³ , λ³κ²½ μ¬νμ λ³ν©νλ κ³Όμ μ ν¬ν¨ν©λλ€.
4. ν μ€ν : κΈ°λ₯ μ ν¨μ± κ²μ¬ λ° νκ· λ°©μ§
ν μ€ν μ μ½λμ μμλλ‘ μλνλμ§ νμΈνκ³ νκ·λ₯Ό λ°©μ§νλ νμ§ κ΄λ¦¬μ νμμ μΈ λΆλΆμ λλ€. TypeScript μ½λλ λ€μμ ν¬ν¨ν λ€μν ν μ€ν κΈ°μ μ μ¬μ©νμ¬ μ² μ ν ν μ€νΈλμ΄μΌ ν©λλ€:
- λ¨μ ν μ€ν : ν¨μ λ° ν΄λμ€μ κ°μ κ°λ³ μ½λ λ¨μλ₯Ό 격리νμ¬ ν μ€νΈν©λλ€.
- ν΅ν© ν μ€ν : μλ‘ λ€λ₯Έ μ½λ λ¨μ κ°μ μνΈ μμ©μ ν μ€νΈνμ¬ μ¬λ°λ₯΄κ² μλνλμ§ νμΈν©λλ€.
- μ’ λ¨ κ° ν μ€ν : μ¬μ©μμ κ΄μ μμ μ 체 μ ν리μΌμ΄μ μ ν μ€νΈνμ¬ λͺ¨λ κ΅¬μ± μμκ° μννκ² μλνλμ§ νμΈν©λλ€.
μΈκΈ° μλ TypeScript ν μ€ν νλ μμν¬λ λ€μκ³Ό κ°μ΅λλ€:
- Jest: μ€λ μ· ν μ€ν , λͺ¨μ(mocking), μ½λ 컀λ²λ¦¬μ§ λΆμμ μ§μνλ λ리 μ¬μ©λλ ν μ€ν νλ μμν¬μ λλ€. Jestλ React νλ‘μ νΈμμ μμ£Ό μ νΈλ©λλ€.
- Mocha: μ΄μ€μ λΌμ΄λΈλ¬λ¦¬μ λͺ¨μ νλ μμν¬λ₯Ό μ νν μ μλ μ μ°ν ν μ€ν νλ μμν¬μ λλ€.
- Jasmine: ν μ€νΈλ₯Ό μμ±νκΈ° μν κΉλνκ³ ννμ μΈ κ΅¬λ¬Έμ μ 곡νλ νλ μ£Όλ κ°λ°(BDD) ν μ€ν νλ μμν¬μ λλ€. Jasmineμ Angular νλ‘μ νΈμμ μΌλ°μ μΌλ‘ μ¬μ©λ©λλ€.
μμ: Jestλ‘ λ¨μ ν μ€νΈ μμ±νκΈ°
Jestλ‘ λ¨μ ν
μ€νΈλ₯Ό μμ±νλ €λ©΄ Jest ν¨ν€μ§λ₯Ό μ€μΉνκ³ .test.ts λλ .spec.ts νμ₯μλ‘ ν
μ€νΈ νμΌμ μμ±ν΄μΌ ν©λλ€.
λ¨Όμ , Jestλ₯Ό μ€μΉν©λλ€:
npm install --save-dev jest @types/jest ts-jest
κ·Έλ° λ€μ, λ€μ ꡬμ±μΌλ‘ jest.config.js νμΌμ μμ±ν©λλ€:
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
};
λ§μ§λ§μΌλ‘, λ€μ λ΄μ©μΌλ‘ ν
μ€νΈ νμΌ(μ: sum.test.ts)μ μμ±ν©λλ€:
import { sum } from './sum';
describe('sum', () => {
it('should add two numbers correctly', () => {
expect(sum(1, 2)).toBe(3);
});
});
5. μ§μμ ν΅ν© (CI): νμ§ κ΄λ¦¬ νλ‘μΈμ€ μλν
μ§μμ ν΅ν©(CI)μ μ½λ λ³κ²½ μ¬νμ 곡μ 리ν¬μ§ν 리μ μμ£Ό ν΅ν©νκ³ ν μ€νΈ λ° κ²μ¬λ₯Ό μλμΌλ‘ μ€ννλ μννΈμ¨μ΄ κ°λ° λ°©μμ λλ€. CIλ κ°λ° μ£ΌκΈ° μ΄κΈ°μ λ¬Έμ λ₯Ό μλ³νκ³ ν΄κ²°νμ¬ ν΅ν© λ¬Έμ μ μνμ μ€μ΄κ³ μ λ°μ μΈ μ½λ νμ§μ ν₯μνλ λ° λμμ μ€λλ€. μΈκΈ° μλ CI νλ«νΌμ λ€μκ³Ό κ°μ΅λλ€:
- Jenkins: μννΈμ¨μ΄λ₯Ό λΉλ, ν μ€νΈ λ° λ°°ν¬νλ λ° μ¬μ©ν μ μλ μ€νμμ€ μλν μλ²μ λλ€. Jenkinsλ κ³ λλ‘ μ¬μ©μ μ μ κ°λ₯νλ©° λ€μν νλ¬κ·ΈμΈμ μ§μν©λλ€.
- GitHub Actions: GitHubμ μ§μ ν΅ν©λ CI/CD νλ«νΌμΌλ‘, μν¬νλ‘λ₯Ό μλνν μ μμ΅λλ€.
- GitLab CI: GitHub Actionsμ μ μ¬ν κΈ°λ₯μ μ 곡νλ©° GitLabμ ν΅ν©λ CI/CD νλ«νΌμ λλ€.
- CircleCI: λΉ λ₯΄κ³ μ λ’°ν μ μλ λΉλλ₯Ό μ 곡νλ ν΄λΌμ°λ κΈ°λ° CI/CD νλ«νΌμ λλ€.
μμ: GitHub Actionsλ‘ CI μ€μ νκΈ°
GitHub Actionsλ‘ CIλ₯Ό μ€μ νλ €λ©΄ 리ν¬μ§ν 리μ .github/workflows λλ ν 리μ YAML νμΌμ μμ±ν΄μΌ ν©λλ€. μ΄ νμΌμ μ½λ λΉλ, ν
μ€νΈ λ° κ²μ¬ λ¨κ³λ₯Ό ν¬ν¨νλ μν¬νλ‘λ₯Ό μ μν©λλ€.
λ€μμ ESLintμ Jestλ₯Ό μ€ννλ GitHub Actions μν¬νλ‘μ μμμ λλ€:
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Run ESLint
run: npm run lint
- name: Run tests
run: npm run test
TypeScript νμ μμ μ± λ§μ€ν°νκΈ°
νμ μμ μ±μ TypeScriptμ κ°μΉ μ μμ ν΅μ¬μ λλ€. TypeScriptμ νμ μμ€ν μ ν¨κ³Όμ μΌλ‘ νμ©νλ©΄ μ»΄νμΌ νμμ λ§μ μΌλ°μ μΈ νλ‘κ·Έλλ° μ€λ₯λ₯Ό λ°©μ§νμ¬ λμ± μ λ’°μ± μκ³ μ μ§λ³΄μ κ°λ₯ν μ½λλ₯Ό λ§λ€ μ μμ΅λλ€.
1. μ μ νμ΄ν μμ©νκΈ°
TypeScriptμ μ μ νμ΄νμ μ¬μ©νλ©΄ λ³μ, ν¨μ λ§€κ°λ³μ λ° λ°ν κ°μ λ°μ΄ν° νμ μ μ§μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ»΄νμΌλ¬λ νμ κ²μ¬λ₯Ό μννκ³ λ°νμ μ μ μ μ¬μ μΈ νμ μ€λ₯λ₯Ό μλ³ν μ μμ΅λλ€.
μμ: λͺ μμ νμ μΌλ‘ λ³μ μ μΈνκΈ°
let name: string = 'John Doe';
let age: number = 30;
let isActive: boolean = true;
2. μΈν°νμ΄μ€ λ° νμ λ³μΉ νμ©
μΈν°νμ΄μ€μ νμ λ³μΉμ κ°μ²΄ λ° κΈ°ν λ°μ΄ν° ꡬ쑰μ ννλ₯Ό μ€λͺ νλ μ¬μ©μ μ§μ νμ μ μ μνλ λ°©λ²μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ νμ μ μ½ μ‘°κ±΄μ μ μ©νκ³ μ½λκ° μΌκ΄λκ³ μμΈ‘ κ°λ₯νλλ‘ λ³΄μ₯ν μ μμ΅λλ€.
μμ: User κ°μ²΄μ λν μΈν°νμ΄μ€ μ μνκΈ°
interface User {
id: number;
name: string;
email: string;
}
function getUser(id: number): User {
// ...
}
3. μ λ€λ¦ νμ©
μ λ€λ¦μ μ¬μ©νλ©΄ νμ μμ μ±μ ν¬μνμ§ μκ³ λ€μν λ°μ΄ν° νμ κ³Ό ν¨κ» μλν μ μλ μ½λλ₯Ό μμ±ν μ μμ΅λλ€. μ΄λ μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈμ ν¨μλ₯Ό μμ±νλ λ° νΉν μ μ©ν©λλ€.
μμ: λ°°μ΄μ λ€μ§λ μ λ€λ¦ ν¨μ μμ±νκΈ°
function reverseArray<T>(arr: T[]): T[] {
return arr.reverse();
}
let numbers: number[] = [1, 2, 3];
let reversedNumbers: number[] = reverseArray(numbers);
let strings: string[] = ['a', 'b', 'c'];
let reversedStrings: string[] = reverseArray(strings);
4. μ λμ¨ λ° μΈν°μΉμ νμ μ¬μ©
μ λμ¨ λ° μΈν°μΉμ νμ μ μ¬μ©νλ©΄ μ¬λ¬ νμ μ κ²°ν©νλ λ 볡μ‘ν νμ μ μλ₯Ό λ§λ€ μ μμ΅λλ€. μ λμ¨ νμ μ μ¬λ¬ νμ μ€ νλκ° λ μ μλ κ°μ λνλ΄κ³ , μΈν°μΉμ νμ μ μ¬λ¬ νμ μ λͺ¨λ μμ±μ κ°μ§ κ°μ λνλ λλ€.
μμ: κ²°κ³Όμ λν μ λμ¨ νμ μ¬μ©
type Result<T, E> = { success: true; value: T } | { success: false; error: E };
function divide(a: number, b: number): Result<number, string> {
if (b === 0) {
return { success: false, error: 'Cannot divide by zero' };
}
return { success: true, value: a / b };
}
5. κ³ κΈ νμ κΈ°μ νμ©
TypeScriptλ νμ μμ μ± λ° μ½λ νμ§μ λμ± ν₯μμν¬ μ μλ λ€μν κ³ κΈ νμ κΈ°μ μ μ 곡ν©λλ€. μ΄λ¬ν κΈ°μ μ λ€μκ³Ό κ°μ΅λλ€:
- μ‘°κ±΄λΆ νμ : λ€λ₯Έ νμ μ λ°λΌ λ¬λΌμ§λ νμ μ μ μν μ μμ΅λλ€.
- λ§€νλ νμ : κΈ°μ‘΄ νμ μ μ νμ μΌλ‘ λ³νν μ μμ΅λλ€.
- νμ μΆλ‘ : μ»΄νμΌλ¬κ° λ³μ λ° ννμμ νμ μ μλμΌλ‘ μΆλ‘ ν μ μλλ‘ ν©λλ€.
TypeScript νμ§ κ΄λ¦¬λ₯Ό μν λͺ¨λ² μ¬λ‘
TypeScript νμ§ κ΄λ¦¬ μμ€ν μ ν¨κ³Όλ₯Ό κ·Ήλννλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
- λͺ νν μ½λ© νμ€ μ립: μ½λ μ€νμΌ, λͺ λͺ κ·μΉ λ° λͺ¨λ² μ¬λ‘μ κ°μ μΈ‘λ©΄μ λ€λ£¨λ λͺ νν μ½λ© νμ€μ μ μνκ³ λ¬Έμνν©λλ€.
- κ²μ¬ νλ‘μΈμ€ μλν: λ¦°ν°, μ μ λΆμ λꡬ λ° ν μ€νΈλ₯Ό CI/CD νμ΄νλΌμΈμ ν΅ν©νμ¬ νμ§ κ΄λ¦¬ νλ‘μΈμ€λ₯Ό μλνν©λλ€.
- μ½λ κ²ν μ₯λ €: μ½λ κ²ν λ₯Ό κ°λ° νλ‘μΈμ€μ νμ λΆλΆμΌλ‘ λ§λ€κ³ κ²ν μλ₯Ό μν λͺ νν μ§μΉ¨μ μ 곡ν©λλ€.
- ν¬κ΄μ μΈ ν μ€νΈ μμ±: λ¨μ ν μ€νΈ, ν΅ν© ν μ€νΈ λ° μ’ λ¨ κ° ν μ€νΈλ₯Ό ν¬ν¨νμ¬ μ½λμ λͺ¨λ μΈ‘λ©΄μ λ€λ£¨λ μ² μ ν ν μ€νΈλ₯Ό μμ±ν©λλ€.
- μ½λ νμ§ μ§ν λͺ¨λν°λ§: μ½λ 컀λ²λ¦¬μ§, μν 볡μ‘λ λ° λ²κ·Έ λ°λμ κ°μ μ½λ νμ§ μ§νλ₯Ό μΆμ νμ¬ κ°μ μ΄ νμν μμμ μλ³ν©λλ€.
- κ΅μ‘ λ° λ©ν λ§ μ 곡: κ°λ°μκ° TypeScript κΈ°μ μ ν₯μνκ³ λͺ¨λ² μ¬λ‘λ₯Ό μ±ννλλ‘ λκΈ° μν΄ κ΅μ‘ λ° λ©ν λ§μ μ 곡ν©λλ€.
- νλ‘μΈμ€ μ§μμ μΌλ‘ κ°μ : λ³ννλ μꡬ μ¬νκ³Ό μλ‘μ΄ κΈ°μ μ μ μνκΈ° μν΄ νμ§ κ΄λ¦¬ νλ‘μΈμ€λ₯Ό μ κΈ°μ μΌλ‘ κ²ν νκ³ μ λ°μ΄νΈν©λλ€.
κ²°λ‘
TypeScript νμ§ κ΄λ¦¬μ ν¬μνλ κ²μ νλ‘μ νΈμ μ₯κΈ°μ μΈ μ±κ³΅μ ν¬μνλ κ²μ λλ€. ν¬κ΄μ μΈ κ²μ¬ μμ€ν μ ꡬννκ³ νμ μμ μ±μ λ§μ€ν°ν¨μΌλ‘μ¨ λμ± μ λ’°ν μ μκ³ μ μ§λ³΄μ κ°λ₯νλ©° νμ₯ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€. μ΄ κ°μ΄λμ μ€λͺ λ λꡬ, κΈ°μ λ° λͺ¨λ² μ¬λ‘λ₯Ό μμ©νμ¬ TypeScript κ°λ° νλ‘μΈμ€λ₯Ό ν₯μνκ³ νμν μννΈμ¨μ΄λ₯Ό μ 곡νμμμ€.
νμ§ κ΄λ¦¬λ ν λ²μ λ Έλ ₯μ΄ μλλΌ μ§μμ μΈ μ½μμμ κΈ°μ΅νμμμ€. νλ‘μΈμ€λ₯Ό μ§μμ μΌλ‘ κ°μ νκ³ , μ€μλ‘λΆν° λ°°μ°λ©°, λμμμ΄ μ§ννλ μννΈμ¨μ΄ κ°λ° νκ²½μ μ μνκΈ° μν΄ λ Έλ ₯νμμμ€.